<?php

namespace app\api\controller;
use think\Controller;
use app\common\controller\Apibase;
use think\DB;
use think\facade\Log;
class Flownode extends Apibase
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ["flow"];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['flow'];
    // protected $auth = true;
    // 流量接口
    public function flow(){
        $get_data = $this->request->post();
        Log::record('接收到的流量json：'.json_encode($get_data),'API');
        if(!$get_data){
            $this->error('参数不存在');
        }
        if (count($get_data) != count($get_data, 1)) {
            $ips = [];
            foreach ($get_data as $k1 => $v1) {
                $ips[$v1['ip']] = $v1['ip'];
            }
            $ips = array_values($ips);
            $res_attr = DB::name("node_attr")->where(['ip'=>$ips])->select();
            $res_node_ip = [];
            foreach ($res_attr as $k2 => $v2) {
                $res_node_ip[] = $v2['ip'];
            }
            $diff = array_diff($ips,$res_node_ip);
            if($diff){
                $insert_data = [];
                foreach ($diff as $k3 => $v3) {
                    $insert_data[$k3]['ip'] = $v3;
                    $insert_data[$k3]['time'] = date("Y-m-d H:i:s",time());
                }
                DB::name("node_attr")->where(['ip'=>$ips])->insertAll($insert_data);
            }
            $res = DB::name('flow_statistics')->insertAll($get_data);
            if($res){
                // 保留天数
                $number = 30;
                $number_day = date("Y-m-d H:i:s",strtotime("-".$number. "day"));
                $this->deleteData("flow_statistics","time",$number_day,$number);
                $this->success('插入成功', $res);
            }
        }else{
            $this->error('格式不正确');
        }
    }
    /**
     * 删除xx表xx天前的数据
     * @Author   huowj
     * @DateTime 2019-07-10T10:50:03+0800
     * @param    [table]    表名
     * @param    [field]    字段
     * @param    [day]      时间
     * @param    [count]    天数
     */
    public function deleteData($table,$field,$day,$count){
        Db::name("$table")->where("$field <= '$day'")->delete();
        Log::record('删除'.$table.'表'.$count.'天前的数据'.PHP_EOL.Db::name("$table")->getLastSql(),'API');
    }
}
